package Algoritmo;

import java.util.Random;

import Clases.Arbol;

public class Cruce {

	public static Cromosoma[] cruce(Cromosoma padre1,Cromosoma padre2){
		Cromosoma hijo1 = new Cromosoma(padre1.getProfundidadMin(),padre1.getProfundidadMax(),padre1.getNumPartidas(),padre1.getPenalizacion());
		Cromosoma hijo2 = new Cromosoma(padre2.getProfundidadMin(),padre2.getProfundidadMax(),padre2.getNumPartidas(),padre2.getPenalizacion());
		Random r = new Random();
		int numNodos = Math.min(padre1.getNumNodos(),padre2.getNumNodos());
		int nodoCruce = r.nextInt(numNodos);
		if (nodoCruce == 0) nodoCruce = 1;
		hijo1.setArbol(padre1.getArbol().clone());
		hijo2.setArbol(padre2.getArbol().clone());
		Arbol subArbol1 = hijo1.getSubArbol(nodoCruce);
		Arbol subArbol2 = hijo2.getSubArbol(nodoCruce);
		Arbol tmp = subArbol1.clone();
		subArbol1.setSubArbol(subArbol2);
		subArbol2.setSubArbol(tmp);
		hijo1.recalcularNumNodos();
		hijo2.recalcularNumNodos();
		hijo1.setAdaptacion();
		hijo2.setAdaptacion();
		Cromosoma[] c = new Cromosoma[2];
		c[0] = (hijo1.getF() < padre1.getF()) ? hijo1 : padre1;
		c[1] = (hijo2.getF() < padre2.getF()) ? hijo2 : padre2;
		return c;
	}
}
